package com.aaa.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author ：Teacher陈（86521760@qq.com）
 * @date ：Created in 2022/8/18 12:01
 * @description：
 * @modified By：
 * @version:
 */
public class MyJdkDynamic implements InvocationHandler {
    LogUtil logUtil = new LogUtil();
    Object targetObj;
    //获取代理对象的方法
    public Object getProxy(Object target){
        targetObj=target;
        Object proxyInstance = Proxy.newProxyInstance(targetObj.getClass().getClassLoader(), targetObj.getClass().getInterfaces(), this);
        return  proxyInstance;
    }

    /**
     * 此方法在代理对象执行的时候自动调用
     * 代理对象的目的是增强处理，不干扰原有目标对象的业务，目标对象仍然需要正常执行
     *   Object invoke = method.invoke(targetObj, args); 目标对象执行
     * @param proxy
     * @param method
     * @param args
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //前置的增强处理
        System.out.println("前置处理");
        logUtil.log(method.getName());
        //目标对象执行
        Object invoke = method.invoke(targetObj, args);
        //后置的增强处理
        System.out.println("后置处理");
        return invoke;
    }
}
